package shoppingmall.manage.mapper;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import shoppingmall.manage.pojo.CommodityOrder;

import java.util.ArrayList;
import java.util.List;
/**
 * 平台订单相关 mapper层对应数据库表tb_commodity_order
 */
@Mapper
public interface CommodityOrderMapper {

    /**
     * 分页查询所有的平台订单列表信息
     */
    @Select("select * from tb_commodity_order limit #{start},#{pageSize}")
    public List<CommodityOrder> getCommodityOrderList (int start, int pageSize);

    /**
     * 查询平台订单总记录数
     */
    @Select("select count(*) from tb_commodity_order")
    public int getCommodityOrderCount ();

    /**
     * 修改订单状态信息(通过订单id)
     */
    public void updateCommodityOrder (CommodityOrder commodityOrder);

    /**
     * 删除订单信息(通过订单id)
     */
    @Delete("delete from tb_commodity_order where order_id = #{orderId}")
    public void deleteCommodityOrder (String orderId);



    /**************************************复杂业务**************************************/
    /**
     * 批量修改订单信息(通过字符串订单id  将已支付的订单状态---->已发货的订单状态)
     */
    public int updateOrderStateByIds (List<String> orderIds, String orderState);

    /**
     * 批量删除平台订单信息 根据orderIds
     */
    public int deleteOrders (List<String> orderIds);

    /**
     * 按照选择的开始日期到结束日期筛选订单 startDate:"" endDate:""
     */
    public List<CommodityOrder> getCommodityOrderListByDate (String startDate, String endDate);

    /**
     * 按照订单状态筛选订单(未支付，已支付，待发货，已发货，运输中，已收货，已评价，已取消，已退货)
     */
    public List<CommodityOrder> getCommodityOrderListByState (String orderState);

    /**
     * 订单排序接口(根据下单时间升降序、订单更新时间升降序、订单总价升降序 进行排序)
     * fieldName:需要排序字段名称
     * sortRule:排序规则(desc/asc)
     */
    public ArrayList<CommodityOrder> getCommodityOrderListSort (String fieldName, String sortRule);

    /**
     * 订单模糊搜索(根据订单号 或者 下单用户id 进行模糊匹配)
     */
    public List<CommodityOrder> getCommodityOrderListByUserIds (List<Integer> userIds);

    public List<CommodityOrder> getCommodityOrderListByOrderId (String orderId);


    /**************************************************************************************/

    /**
     * 创建一条订单信息(前台api接口应该做的)
     * @@仅供测试使用
     */
    public void saveCommodityOrder (CommodityOrder commodityOrder);
}
